package com.xuhuan.algorithm.demo3;

/**
 * @author huan.xu
 * @ClassName Demo3Code
 * @date 2021/4/22 15:26
 * @Description DCL:Double Check Lock
 * 为了防止指令重排、线程安全，所以单例模式要这样处理
 * 　将变量instance使用volatile修饰即可实现单例模式的线程安全。
 */
public class Demo3Code {

    private volatile static Demo3Code instance = null;

    /**
     * 单例模式，私有构造器
     */
    private Demo3Code(){}

    public static Demo3Code getInstance() {
        if (instance == null) {
            synchronized (Demo3Code.class) {
                if (instance == null) {
                    instance = new Demo3Code();
                }
            }
        }
        return instance;
    }
}
